package com.zxy.leetcode.lcof;

/**
 * https://leetcode-cn.com/problems/er-jin-zhi-zhong-1de-ge-shu-lcof/
 *
 * 二进制中1的个数
 * 请实现一个函数，输入一个整数（以二进制串形式），输出该数二进制表示中 1 的个数。
 * 例如，把 9 表示成二进制是 1001，有 2 位是 1。因此，如果输入 9，则该函数输出 2。
 *
 * 标签：二进制、位运算
 *
 * '>>' 算术右移，向右移左边补符号位
 * '>>>' 逻辑右移，向右移左边补0
 */
public class Test15 {

    public static void main(String[] args) {
        Test15 test = new Test15();
        System.out.println(test.hammingWeight(-3));
        System.out.println(test.hammingWeight(0));
        System.out.println(test.hammingWeight(3));
        System.out.println(test.hammingWeight(Integer.MIN_VALUE + 1));
    }

    public int hammingWeight(int n) {
        int count = 0;
        while (n != 0) {
            if ((n & 1) == 1) {
                count++;
            }
            n >>>= 1;
        }

        return count;
    }
}
